{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "cb9673f3",
   "metadata": {},
   "source": [
    "# 机器读心术之神经网络与深度学习第9课书面作业\n",
    "学号：207567\n",
    "\n",
    "**书面作业：**  \n",
    "以下两题2选1，如果都能完成会受到老师极度赞赏  \n",
    "1. 请说一下在《ImageNet Classification with Deep Convolutional Neural Networks》一文中4.2节所描述的“dropout”是怎样一种处理技术？  \n",
    "2. 在以下链接  \n",
    "http://www.vlfeat.org/matconvnet/  \n",
    "下载及部署matconvnet，这是MatLAB上的CNN工具包，并挑选一个范例模型跑一下看看，抓图实验过程"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "508d1290",
   "metadata": {},
   "source": [
    "## 第1题\n",
    "请说一下在《ImageNet Classification with Deep Convolutional Neural Networks》一文中4.2节所描述的“dropout”是怎样一种处理技术？"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ee46d383",
   "metadata": {},
   "source": [
    "**答**：  "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4cfd9289",
   "metadata": {},
   "source": [
    "dropout技术来源是基于如下一个观察：在机器学习中通常用不同的模型进行组合，或者叫进行集成学习会取得更好地效果，同时这种集成学习在抗过拟合上有更好的表现。但是在深度学习的情况下，训练一个深度模型已经很困难了，更不要说训练多个不同的模型。但是有人想到了一个非常聪明的办法，就是在同一个深度网络中，针对不同神经元，在训练过程中以概率p(p是超参数)随机地选择一些神经元丢弃不用（即对这些神经的输出不采用），这造成了好像出现了很多个不同的模型，有点像集成学习的过程了，同时这种随机过程有利于打破神经元之间的隐藏的一些依赖，逼迫不同神经元去学习更深刻的特征。在预测时，这些在训练中被选定的丢弃的神经的输出会被用上，只不过会乘以概率p。  \n",
    "dropout技术是由Hinton在2012提出，论文是：Improving neural networks by preventing co-adaptation of feature detectors. arXiv preprint arXiv:1207.0580, 2012."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "71356894",
   "metadata": {},
   "source": [
    "## 第2题\n",
    "在以下链接  \n",
    "http://www.vlfeat.org/matconvnet/  \n",
    "下载及部署matconvnet，这是MatLAB上的CNN工具包，并挑选一个范例模型跑一下看看，抓图实验过程"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9bbe8f65",
   "metadata": {},
   "source": [
    "**答：**  \n",
    "在Matlab 2021b+VS2017社区版上安装matconvnet-1.0-beta25版本，用预训练模型imagenet-vgg-f来试验了一下，实验过程截图如下："
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4486d4ef",
   "metadata": {},
   "source": [
    "![mind09-1](https://gitee.com/dotzhen/cloud-notes/raw/master/mind09-1.png)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
